package ar.uade.distribuidas.tpo.dba.dao;

import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import com.google.common.collect.Maps;

import ar.uade.distribuidas.tpo.dba.dominio.ItemRemito;
import ar.uade.distribuidas.tpo.dba.dominio.OrdenDePedido;
import ar.uade.distribuidas.tpo.dba.dominio.Remito;
import ar.uade.distribuidas.tpo.dba.dominio.Rodamiento;


public class RemitoXmlDAO {
	private static final String DIR_XML_REMITOS = "c:/distribuidas/remitos/";
	private static RemitoXmlDAO instancia;
	private static String ARCHIVO = "remito.xml";
	private Document doc;
	
	
	public static RemitoXmlDAO getInstancia() {
		if(instancia == null){
			instancia = new RemitoXmlDAO();
		}
		return instancia;
	}


	public RemitoXmlDAO() {
		super();
		
	}
	
	public void saveRemitoToXml(Remito ro) {
		Map<OrdenDePedido, List<ItemRemito>> mtemp;
		mtemp = ro.getItemsPorOrdenDePedido();
		String xmlRemito="<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
		xmlRemito += "<Remito numero="+String.valueOf(ro.getNumero())+">" 
		+"<Emision>"+ro.getFecha().toString()+"</Emision>"			
		+"<Cliente>" 
		+"<Cuil>"+ro.getCliente().getCuil()+"</Cuil>"
		+"<RazonSocial>"+ro.getCliente().getNombre()+"</RazonSocial>"
		+"</Cliente>"
		+"<Referencia>"
		+"<OrdenPedido>";
		Iterator<OrdenDePedido> it = mtemp.keySet().iterator();
		while(it.hasNext()){
		  OrdenDePedido key = it.next();
		  xmlRemito += "<Numero>"+key.getNumero()+">"
		  +"</Numero>"
	      +"<Fecha>" + key.getFecha()
	      +"</Fecha>"
	      +"<Rodamientos>";
			
		
		  for (ItemRemito i : mtemp.get(key)) {
				xmlRemito +="<Item serie="+i.getRodamiento().getNroSerie()+">"
				+"<Sufijo>"+i.getRodamiento().getSufijo()+"</Sufijo>"
				+"<Marca>"+i.getRodamiento().getMarca()+"</Marca>"
				+"<Origen>"+i.getRodamiento().getPais()+"</Origen>"
				+"<Cantidad>"
				+i.getCantidad()
				+"</Cantidad>"
				+"</Item>";
			}
		
		
		
		

		xmlRemito +="</Rodamientos></OrdenPedido>";
				
		}
		xmlRemito += "</Referencia></Remito>";
	

		System.out.println(xmlRemito);
		try {
	        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
	        DocumentBuilder builder = factory.newDocumentBuilder();
	        Document f = builder.parse(new InputSource(new StringReader(xmlRemito)));
	        
	        Transformer transformer;
			try {
				
				transformer = TransformerFactory.newInstance().newTransformer();
		        Result output = new StreamResult(new File(DIR_XML_REMITOS+"REMITO_"+ro.getNumero()+".xml"));
		        Source input = new DOMSource(f);
		
		        transformer.transform(input, output);
			} catch (Exception e) {
				
				e.printStackTrace();
			}
			} catch (SAXException e) {
				
				e.printStackTrace();
			} catch (IOException e) {
			
				e.printStackTrace();
			} catch (ParserConfigurationException e) {
				
				e.printStackTrace();
			} catch (Exception e) {
				
				e.printStackTrace();
			}
		
	}

	
	
}
